home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / September 93.iso / Archives / Sound / MIDI / MIDI Utilities / MIDI Control 1.0 / MC-instructions < prev    next >
Text File  |  1988-02-09  |  20KB  |  165 lines

  1.  
  2.                         ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
  3.                         MidiControl - version 1.0
  4.                         ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
  5.  
  6.  
  7.     • MidiControl lets you open windows, and create standard Macintosh controls (buttons, check-boxes, radios and scroll-bars), freely move and resize them, and assign to each control a midi-message of any kind, which will be sent every time the control is clicked.
  8.  
  9.     • The number of controls that a window can contain is limited only by the size of the window (controls may become hard to select if they overlap); the number of windows allowed is only limited by the available memory in the Mac.
  10.  
  11.     • Any midi-message can be put in a control; this opens very large fields of applications. MidiControl may be used, for instance, to "mix" the 16 midi-channels: you can instantly create 16 scroll-bars, each one controlling the volume of a channel. If the instruments you want to control have a large midi implementation, you can deeply enter into controlling any parameter: a Dx7, for instance, can be totally controlled, through its System Exclusive messages.
  12.  
  13.     • MidiControl will reach its full usefulness when run under MultiFinder, together with some other midi-application: its windows can stay behind a sequencer, ready to come on a click, and allow to send messages very easily anytime: reinitialize some parameters, quickly edit a sound, remote-control a rack-mounted instrument...
  14.  
  15.     • You definitely must know at least some of the midi hex-format to fully use MidiControl. The MidiTest program (available around) will allow you to read on the screen in hex-format any incoming data, as well as typing a message in hex and send it to try. If you don't know anything about midi, bytes, hexadecimal, spend a few hours on MidiTest: you'll see that it's MUCH easier than you probably think. MidiTest also includes a full description of the midi format. Don't be anymore afraid of hexadecimal: this way of "spelling" is much more meaningful than decimal would be for midi. Once again, it's EASY, and a good understanding of it is invaluable for taking full control of any midi-instrument.
  16.  
  17.  
  18. ————————————————¬
  19. Global parameters
  20. ————————————————-
  21.  
  22.     • Some parameters in MidiControl keep their values over all the windows:
  23.         ◊ Midi-thru on/off;
  24.         ◊ Main midi-channel;
  25.         ◊ Serial port used for the midi-interface;
  26.         ◊ Mac-keyboard configuration.
  27.  
  28.     • Midi-thru: when this item is selected ("Midi" menu), any incoming byte is immediatly transmitted to midi-out. The thru-on allows to use a keyboard "in front of" the Mac in the midi-link; incoming messages will have a priority over those coming from the controls on the screen, to avoid any delay while thruing.
  29.         MidiControl doesn't care, however, of the incoming data (except that it filters the active sensing FE). If the device connected to the midi-in makes use of the "running-status", some midi-errors may occur. Here's why:
  30.         1) a note, let's take E3, is played on the keyboard, the Mac receives the message:
  31.             90 40 40, it sends it back in thru immediatly.
  32.         2) a click occurs on a button, whose part is to emulate a "sustain-pedal down", the Mac sends:
  33.             B0 40 7F
  34.         3) the E3 is released on the keyboard, the Mac receives:
  35.             40 00 (no 90 if running-status is used), and sends it back: error! The instrument behind the Mac will understand it as (B0) 40 00, will "release" the sustain-pedal... and let the note on stay on.
  36.         If you can't set-up your keyboard to NOT send data with running-status, this kind of error may easily occur if the screen-controls are moved the same time you play on the keyboard. In case, the "All Notes Off" item in the "Midi" menu (cmd-A on the keyboard) has the following effect:
  37.         1) it closes, one by one, all the notes on the main channel;
  38.         2) it sends a Bn 40 00 on every channels (sustain-off);
  39.         3) it sends finally a Bn 7B 00 (All Notes Off) on every channels. This command will handle most of the worst midi-errors.
  40.  
  41.     • Main midi-channel: it's the channel used in the channelized messages (see below how to define it in the controls) and by the midi-Mac-keyboard. The selection dialog may be called in the "Midi" menu, or, faster, by clicking in the rectangle in the window's top-left corner, in which it's displayed.
  42.  
  43.     • Interface: the midi-driver used in MidiControl has been written in 68000 assembly-language by Kirk Austin, and published in MacTutor™. The current version of this driver doesn't allow for user-selecting the interface clock rate: I choosed 1MHz, which is the most common rate (sorry if it's not yours!). The "Interface" item in the "Midi" menu let you select the serial port connected to your interface (modem or printer).
  44.  
  45.     • Mac keyboard: the keys emulate a midi-keyboard, the vertical position of the cursor on the screen is taken as the velocity parameter. See below.
  46.  
  47.  
  48. ————————————————¬
  49. Creating controls
  50. ————————————————-
  51.  
  52.     • The controls are grouped in windows, each window owns a separate data-file. The maximum number of windows is only limited by the available memory; be aware that under MultiFinder, the memory-size to give to MidiControl may vary considerably, according to the number of windows you want to open, and to how many controls are contained in each window (the default size allows for a dozen of average windows). A multi-window configuration is invaluable for clearly grouping controls that play on the same type of parameters or on the same instrument; conversely you can mix in the same window some controls created for totally separate functions. 
  53.  
  54.     • the "Controls" menu is only active when a window is open (and frontmost). The "New" command ("File" menu) adds a new, empty window; every items in the "File" and "Edit" menus are quite standard. The "Edit" menu is only active when a DA-window is frontmost, it's not used by MidiControl.
  55.  
  56.     • To create a control, simply select the type you need in the "Controls" menu: button, check-box, group of radios, horizontal or vertical scroll-bar. The cursor is then turned to a "right angle", which shows the top-left corner of the new control: click in the window, the control appears where you've clicked and the cursor turns back to normal. If you've clicked out of the active window, nothing happens, the operation is cancelled. The groups of radios work differently: a dialog comes that asks you how many radios you need in the group (2 to 8), the radios then directly appear in the window.
  57.  
  58.     • You can move the controls anywhere in the window: keep the "option"-key down: the cursor turns to a "double-arrow" and you can drag the controls. If the "Grid" option is checked in the "Controls" menu, the dragged control will be moved on a 8 pixels grid. This "Grid" option is selected when you start the program.
  59.  
  60.     • You may also resize the controls, exactly the same way, except that you must keep the "shift"-key down instead of the "option-key". The cursor turns to a "grow-box". If the "Grid" is on, it's width is 4 pixels here. Resizing has different effects, depending on the type of control:
  61.         ◊ buttons may be freely growed or shrinked;
  62.         ◊ scroll-bars may only be lenghthened or shortened;
  63.         ◊ radios and check-boxes don't change, but their "active zone" is resized. They may slightly move, as they are automatically placed in the middle of their active zone (vertically). Be careful to not let those zones overlap (as they are normally invisible), selecting a control "under" may become quite acrobatic...
  64.  
  65.     • To delete a control, select the item "Delete" in the "Controls" menu: the cursor turns to a "deletor" and the first control you click on disappears. If you finally don't want to delete anything, just click anywhere else. You can safely delete one or more radios in a group, the "group" by itself will be automatically deleted if its last radio is deleted (a group including only one radio may exist, the lonesome radio will simply act as a button). Conversely, there is no way to add a radio to an existing group.
  66.  
  67.     • When a window owns a lot of controls, the program slows down and this can become annoying on the scroll-bars. In such a case, select the "Fast mode" in the "Controls" menu. Conversely, the "Fast mode" is annoying if the window contains a few controls only: it's nearly impossible to increment a scroll-bar of only one step; turn back to normal mode.
  68.  
  69.  
  70. ——————————————————————¬
  71. How to define a control
  72. ——————————————————————-
  73.  
  74.     • To define a control, after creating it, hold down the "command"-key (the cursor turns to a question-mark) and click on it: the definition dialog comes.
  75.  
  76.     • The parameters to define are different, according to the control type; they all have at least a title (the name of the control, as it appears on the screen) and a midi message.
  77.         ◊ Button: this is the most simple control, only the title and the message.
  78.         ◊ Check-box: the definition may include two different messages, the first will be sent when the box is checked, and the second when it's unchecked.
  79.         ◊ Radio: the "group" has only a display purpose (you can see immediatly which was the last clicked); in fact each radio includes its own message, and is totally independent of the others.
  80.         ◊ Scroll-bar: the definition includes the min and max values of the scroll-bar, its direction, and its step-values. Reminding the scroll-bars we all use for moving in a text-document, the steps have been labelled "line" and "page", according to the part of the scroll-bar that is clicked.
  81.  
  82.     • Choosing between this or that type of control is usually somewhat obvious: a "continuous"-type control, volume for instance, will need a scroll-bar; a sustain-pedal will be perfect in a check-box; a waveform selector will be more friendly with radios; simple buttons will be enough for many simple messages.
  83.  
  84.     • The midi message must be typed in hexadecimal. You can use lowercase or uppercase for the letters a-f; you may insert a "legibility" space between hex-bytes (not more than one space!), but you don't HAVE to do so: b0407f will be understood as B0 40 7F. Only the midi messages must be in hex; any other numeric value, such as scroll-bar's max and min, MUST be entered as decimal values.
  85.  
  86.     • Any midi message can be typed, except three reserved values, plus a non-hex character:
  87.  
  88.         ◊ FF (midi system reset) is used internally by the program and MUST NOT BE TYPED in the message field. If you need to send a FF, select the "Midi System Reset" item in the "Midi" menu: a FF is sent to the midi-out.
  89.  
  90.         ◊ FE (active sensing) is "rerouted": the received active sensing bytes are filtered, not even retransmitted in thru (nobody HAS to use active sensing). Into MidiControl, that value is used as a mark for channelizing a byte. For example:
  91.             - let's create a button, and call it "sustain-on",
  92.             - if we put in it B0 40 7F, it will STRICTLY send it (means on channel 1, as it's defined as B0), whatever the main channel has been set to;
  93.             - conversely if we put in it FE B0 40 7F, the message will be sent on the current main channel.
  94.             The FE value forces the program to see the following byte as "channelizable", whatever its value, even if it's not a status. That channelizing is made by ADDING the main channel value (0-F) to the channel found in the byte; it's NOT made by masking the original channel. THIS IS IMPORTANT: if you define FE B1 40 7F, it will be channelized, but sent to the current channel +1, FE B2 +2, FE B3 +3, etc...; this addition has no carry: if its result goes over channel 16, it returns to channel 1; for instance a FE B3 sent with the main channel set to 15 will produce a B1 (do you clearly understand why?).
  95.             There may be more than one FE in a message: this is especially useful in the long messages like channelized sysex (normally a sysex is NOT a channelized message, but many instrument-makers have decided that their would be, they usually call the channel-byte "device number"). For example:
  96.             - let's define a Dx7-sysex: F0 43 10 00 ... F7, this message will not take care of our main channel set-up and will always be sent on channel 1;
  97.             - we can make it use the current channel: F0 43 FE 10 00 ... F7, the third byte is the "device number" in Dx7-sysex. The message is now channelized, you can direct it to one Dx7 between several (or TF1 in a Tx816) if they are set-up for different channels.
  98.  
  99.         ◊ F8 (midi-clock) is NOT filtered, and will be thrued normally if it comes to midi-in. Internally, this value is also "rerouted", and is used to generate a pause between two parts of a message, 100ms long. You can use several following F8 bytes if you need a longer pause. For example:
  100.             - let's create a button, and label it "E3";
  101.             - we put in it 90 40 40 90 40 00: the note will play and stop immediatly, often you won't even hear the result (except if the sound played has some release in it);
  102.             - now we insert the pause: 90 40 40 F8 F8 F8 F8 F8 90 40 00, the note will stay on for half a second.
  103.  
  104.         ◊ A last character may be used: the letter "p" (or "P") will tell the program to insert right here the local parameter (the current value of the control). For example:
  105.             - create a scroll-bar, label it "volume";
  106.             - put in it B0 07 P, the volume-value sent will be the scroll-bar's value.
  107.             The "p" may be used more than one time in the message, allowing to control more than one parameter in a single scroll-bar: FE B0 07 P FE B0 02 P will change the volume and the breath-control value together, on the main channel.
  108.             Using the "P" in a non-scroll-bar type of control is obviously useless, those other types don't have any value parameter.
  109.  
  110.     • The length of the messages and the titles is not limited to the fields size, the fields can scroll horizontally. Do not go over 255 characters typed (including spaces). There is another way to send messages, without any length limit, see below.
  111.  
  112.     • Although the "Edit" menu is only active while a DA is frontmost, you may cut/copy/paste in the dialogs, when you define controls: use the keyboard equivalent commands (cmd-X, cmd-C, cmd-V). The clipboard may be shared with DAs, or with other applications, if they can handle text-type clipboard.
  113.  
  114.  
  115. —————————————————¬
  116. Macintosh keyboard
  117. —————————————————-
  118.  
  119.     • As soon as a window is open, the Mac keyboard is converted to a midi keyboard. The "Z" is C3, the "Q" is C4, both key-rows beeing arranged as a piano keyboard. If the "shift"-key (or caps-lock) is down, the keyboard is transposed 2 octaves below. The current velocity is displayed in the top-left corner of the front window, with the main channel (the keyboard uses both); the velocity value is calculated from the vertical cursor position on the screen. If you hit a "non-piano" key, the new velocity is calculated and displayed, but nothing is sent to midi-out.
  120.  
  121.     • The Mac keyboard doesn't allow for a serious detection of more than two simultaneous keys: so you have a duophonic keyboard. Avoid changing octave (shift or caps-lock) while a key is down, it may let notes opened and drive you to send a "All Notes Off" from the "Midi" menu...
  122.  
  123.     • Under MultiFinder, the system may "forget" to send to MidiControl some of the "key-up" informations. Most application simply don't care of "key-up"s, and they seem to have some problems to go thru under MultiFinder. Once again, if some note stays on while it should have stop, issue a "All Notes Off".
  124.  
  125.     • The keyboard redefinition can be selected ("Midi" menu, "Keyboard") between the US keyboard QWERTY and the french one AZERTY. The KCHR you use may somehow interfer with those redefinitions (KCHR is selected in the "Control Panel" DA, in the "keyboard" part, since the version 4.1 of the system), especially if it's not the standard KCHR from Apple. In case, you may have a look to the STR# with ResEdit, it's quite obvious.
  126.  
  127.  
  128. ————————————¬
  129. Long messages
  130. ————————————-
  131.  
  132.     • Some long messages, such as program dumps in sysex, may reach several hundreds, even thousands bytes; much more than a control may contain. The "voice-init" Dx7 message is a small example: it's normally 163 bytes long, to display it in the definition dialog it would need 489 characters (2 hex chars plus a space per byte). It's actually contained into a special resource of type "MESs". When MidiControl is launched, it loads every "MESs" resources it founds and add them to the "Midi" menu. You can add yours very easily:
  133.         ◊ launch ResEdit, open A COPY of MidiControl (always use a copy when ResEditing in a program!);
  134.         ◊ open the "MESs" resources, pick-up "New" in the "File" menu: a new empty "MESs" resource is added;
  135.         ◊ type-in the hex-bytes of your message, don't forget to insert FE's if you want it channelized;
  136.         ◊ close the window, pick-up "Get Info" in the "File" menu;
  137.         ◊ type-in the name of the new resource, this is the name which will appear in the menu (don't change the resource-id);
  138.         ◊ close every window, till ResEdit asks for "saving changes", answer "yes";
  139.         ◊ quit ResEdit, launch MidiControl, pull-down the "Midi" menu: your new message is right here, ready to be sent, whatever its length is.
  140.  
  141.     • A trick for MidiTest users (version 2.xx): if you want to keep a received message, convert it to ASCII and copy it; you'll may paste it back instantly in ResEdit (instead of laboriously typing the whole message in hex-values!). You may put any kind of data in those "MESs" resource, even whole patch-banks! The only limit is that a resource in a Macintosh file must not be larger than 32K (32768 bytes). There is no limit, though, to how many of those resources can be added into MidiControl: if the "Midi" menu grows too long to fit in the screen, it will scroll automatically.
  142.  
  143.  
  144. ————————————¬
  145. Compatibility
  146. ————————————-
  147.  
  148.     • MidiControl can run on Mac 512-800, plus, SE and //. It may work with an older Mac (64K ROM) if the system version is not below 4.0.
  149.  
  150.     • MidiControl can run under Switcher or MultiFinder (I don't actually think I would have written it if MultiFinder didn't exist!): the midi driver is deactivated while MidiControl is not frontmost, the program doesn't performs any background task. You must carefully check the amount of memory that is needed by your windows (Switcher infos, or Finder infos under MultiFinder), and allocate more memory to MidiControl if you need to simultaneously open a lot of windows. Default allows for a dozen of averagely filled windows.
  151.  
  152.  
  153. ————————¬
  154. Shareware
  155. ————————-
  156.  
  157.     • MidiControl is shareware: see "About MidiControl…". Paying sharewares is a way of helping non-copy-protected software to keep on being around. Creating a serious copy-protection scheme is difficult and time-consuming (and so, expensive): the honest end-user pays for it, and gets the troubles not even for free (key-disk, slow loading for decryption, problems with a new system update only caused by copy-protection, and so on...).
  158.  
  159.     • The shareware system, conversely, works through mutual trust and integrity: the user pays a very small price, to be compared to the price the same program would be sold copy-protected; the author "follows" the program and directly prompts registered users if a new version is available.
  160.  
  161.     • MidiControl, as a shareware, may be freely copyed and distributed; see the "About…" for the copyrights. I hope you'll enjoy it.
  162.  
  163.  
  164. ©Benoît Widemann - 2/8/88    ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
  165.